home *** CD-ROM | disk | FTP | other *** search
/ Suzy B Software 2 / Suzy B Software CD-ROM 2 (1994).iso / new_file / fontwork / pgsmodst / atariprt.lzh / DIAB804.S < prev    next >
Encoding:
Text File  |  1991-07-18  |  4.7 KB  |  253 lines

  1. .include "prtequ.h"
  2.  
  3. *
  4. * SLM804 print driver
  5. *
  6. CR    equ    $d
  7. LF    equ    $a
  8. FF    equ    $c
  9. ESC    equ    $1b
  10. DC2    equ    $12
  11.  
  12.     .text
  13. ***************************************************************
  14. ***************************************************************
  15. ***************************************************************
  16. dumbentry:
  17.     clr.l    d0
  18.     rts
  19.  
  20.     dc.l    "PRNT"
  21.     dc.w    201
  22.  
  23. *
  24. * distribute the calls to the appropriate routines
  25. *
  26. slm804:    lsl.w    #2,d0
  27.     lea    prntbl,a1
  28.     move.l    0(a1,d0.w),a1
  29.     jmp    (a1)
  30.  
  31.  
  32. *
  33. * identify who I am, and set up who I like to speak to.
  34. *
  35. p_ident:
  36.     move.l    #driver,pdrvrnm(a0)    ;pointer to string for driver name
  37.     move.w    #PARALLEL+ASCENDING,device(a0)
  38. prtok:    moveq    #1,d0
  39. rrts:    rts
  40.  
  41. *
  42. * initialize the table of printer specific routines
  43. *
  44. p_init:    move.l    #driver,pdrvrnm(a0)    ;pointer to string for driver name
  45.     clr.b    pdl(a0)            ;not a page description language driver
  46.     move.b    #1,pmult(a0)        ;automatically print mulitiple copies?
  47.     clr.b    pman(a0)        ;handle manual feed?
  48.     move.b    #PRT_BW,ptype(a0)    ;printer type?
  49.  
  50.     move.w    #0,pxover(a0)        ;percentage of x overlap of dots
  51.     move.w    #0,pyover(a0)        ;percentage of y overlap of dots
  52.     move.w    #1,prowht(a0)        ;smallest height of print head
  53.  
  54.     move.l    sendout(a0),send+2    ;self-modifing code, tisk, tisk!
  55.  
  56. *
  57. * pminlft and pmaxw must be evenly divisible by 16
  58. *
  59.     move.w    pdensity(a0),d0
  60.     cmp.w    #7,d0
  61.     bcs    pint1
  62.     moveq    #6,d0
  63. pint1:    lsl.w    #1,d0
  64.  
  65.     lea    scl_tbl,a1
  66.     move.w    0(a1,d0.w),scale
  67.     lea    xdpi_tbl,a1
  68.     move.w    0(a1,d0.w),pxdpi(a0)    ;x resolution
  69.     lea    ydpi_tbl,a1
  70.     move.w    0(a1,d0.w),pydpi(a0)    ;y resolution
  71.     lea    minl_tbl,a1
  72.     move.w    0(a1,d0.w),pminlft(a0)    ;pixels from the left
  73.     lea    minr_tbl,a1
  74.     move.w    0(a1,d0.w),pminrht(a0)    ;pixels from the right
  75.     lea    mint_tbl,a1
  76.     move.w    0(a1,d0.w),pmintop(a0)    ;pixels down from top
  77.     lea    minb_tbl,a1
  78.     move.w    0(a1,d0.w),pminbot(a0)    ;pixels up from bottom
  79.  
  80.     lsl.w    #1,d0
  81.     lea    maxw_tbl,a1
  82.     move.l    0(a1,d0.w),pmaxw(a0)    ;maximum # pixels across
  83.     lea    maxh_tbl,a1
  84.     move.l    0(a1,d0.w),pmaxh(a0)    ;maximum # pixels down
  85.     bra    prtok
  86.  
  87. *
  88. * going to begin printing a document
  89. *
  90. p_bgndoc:
  91.     bra    prtok
  92.  
  93. *
  94. * about to start printing of a page
  95. *
  96. p_bgnpage:
  97.     bra    prtok
  98.  
  99. *
  100. * about to print a new tile for the page
  101. *
  102. p_bgntile:
  103.     bra    prtok
  104.  
  105. *
  106. * print a block to the printer
  107. *
  108. p_block:
  109.     move.l    pblockptr(a0),a1
  110.     move.l    (a1),s_form
  111.     clr.w    s_xmin
  112.     clr.w    s_ymin
  113.     move.l    pblockw(a0),d0
  114.     move.w    d0,s_nxln
  115.     lsl.w    #3,d0
  116.     move.w    d0,b_width
  117.     move.l    pblockh(a0),d0
  118.     move.w    d0,b_height
  119.     clr.l    pblockh(a0)
  120.  
  121.     clr.w    d_xmin
  122.     move.l    pblocky(a0),d0
  123.     move.w    d0,d_ymin
  124.  
  125.  
  126.     move.w    scale,sclfactor        ;vary this depending on draft/final
  127.  
  128.     move.w    pcopies(a0),tcopy
  129.  
  130. block1:    move.b    #ESC,d0
  131.     jsr    send
  132.     move.b    #DC2,d0
  133.     jsr    send
  134.     move.b    #"G",d0
  135.     jsr    send
  136.     move.l    #s_form,temp
  137.     move.b    temp,d0
  138.     jsr    sendh
  139.     move.b    temp+1,d0
  140.     jsr    sendh
  141.     move.b    temp+2,d0
  142.     jsr    sendh
  143.     move.b    temp+3,d0
  144.     jsr    sendh
  145.     move.b    #$20,d0            ;space
  146.     jsr    send
  147.     move.b    #FF,d0
  148.     jsr    send
  149.  
  150.     subq.w    #1,tcopy
  151.     bhi    block1
  152.     bra    prtok
  153.  
  154. *
  155. * just finished describing current tile
  156. *
  157. p_endtile:
  158.     bra    prtok
  159.  
  160. *
  161. * just finished describing all tiles for this page
  162. *
  163. p_endpage:
  164.     bra    prtok
  165.  
  166. *
  167. * finished printing the document
  168. *
  169. p_enddoc:
  170.     bra    prtok
  171.  
  172. ***************************************************
  173. ***    these are the send routines for the    ***
  174. ***    dot matrix driver.            ***
  175. ***************************************************
  176. *
  177. *
  178. sendh:    move.w    d0,-(sp)
  179.     lsr.b    #4,d0
  180.     jsr    rc1
  181.     move.w    (sp)+,d0
  182. rc1:    and.w    #$f,d0
  183.     lea    hex,a0
  184.     move.b    0(a0,d0.w),d0
  185.     jmp    send
  186. *
  187. *
  188. sendline:
  189.     move.b    (a0)+,d0
  190.     beq    prtok
  191.     move.l    a0,-(sp)
  192.     jsr    send
  193.     move.l    (sp)+,a0
  194.     bra    sendline
  195. *
  196. *
  197. sendn:    cmp.w    #10,d0
  198.     bcs    sdn1
  199.     and.l    #$ffff,d0
  200.     divu    #10,d0
  201.     swap    d0
  202.     move.w    d0,-(sp)
  203.     swap    d0
  204.     jsr    sendn
  205.     move.w    (sp)+,d0
  206. sdn1:    or.b    #"0",d0
  207.     jmp    send
  208. *
  209. *
  210. send:    jmp    $ffffff
  211. *
  212. *
  213. ***********************************
  214. ***                ***
  215. ***********************************
  216.     .data
  217.  
  218. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  219.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  220.     dc.l    p_block
  221.     dc.l    p_endtile,p_endpage,p_enddoc
  222.     dc.l    prtok,p_ident
  223.  
  224. scl_tbl:    dc.w    4,2,1,1,2,1,1
  225. xdpi_tbl:    dc.w    75,150,300,300,75,300,300
  226. ydpi_tbl:    dc.w    75,150,300,300,150,300,300
  227. minl_tbl:    dc.w    20,40,80,80,20,80,80
  228. minr_tbl:    dc.w    20,40,80,80,20,80,80
  229. mint_tbl:    dc.w    14,28,56,56,28,56,56
  230. minb_tbl:    dc.w    14,28,56,56,28,56,56
  231. maxw_tbl:    dc.l    600,1200,2400,2400,600,2400,2400
  232. maxh_tbl:    dc.l    0,0,0,0,0,0,0,0
  233.  
  234. s_form:        dc.l    0
  235. s_xmin:        dc.w    0
  236. s_ymin:        dc.w    0
  237. s_nxln:        dc.w    0
  238. b_width:    dc.w    0
  239. b_height:    dc.w    0
  240. d_xmin:        dc.w    0
  241. d_ymin:        dc.w    0
  242. sclfactor:    dc.w    0
  243.  
  244.  
  245. driver:        dc.b    "Atari SLM804 laser v2.0",0
  246. hex:        dc.b    "0123456789ABCDEF"
  247.  
  248.     .bss
  249. temp:        ds.l    1
  250. tcopy:        ds.w    1
  251. scale:        ds.w    1
  252.  
  253.